/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.javiermoreno.bankof.servicios;

import com.javiermoreno.bankof.dominio.CuentaCorriente;
import com.javiermoreno.bankof.dominio.ProductoFinanciero;
import com.javiermoreno.bankof.dominio.dao.ProductoFinancieroDAO;
import com.javiermoreno.framework.errores.BusinessException;
import java.util.LinkedHashSet;
import java.util.Set;

/**
 *
 * @author Administrador
 */
public class GestionProductosFinancierosServImplStandard 
implements GestionProductosFinancierosServ {
    

    private ProductoFinancieroDAO productosDAO;
    

    GestionProductosFinancierosServImplStandard() {      
    }
    
    @Override
    public Set<ProductoFinanciero> obtenerProductosCliente(String username) {
        return productosDAO.findPorCliente(username);
    }
    
    @Override
    public Set<CuentaCorriente> obtenerCuentasCorrienteCliente(String username) {
        Set<ProductoFinanciero> productosCliente = 
                productosDAO.findPorCliente(username);
        Set<CuentaCorriente> cuentasCliente = new LinkedHashSet<CuentaCorriente>();
        for (ProductoFinanciero prodActual : productosCliente) {
            if (prodActual instanceof CuentaCorriente) {
                cuentasCliente.add((CuentaCorriente) prodActual);
            }
        }
        return cuentasCliente;
    }

    @Override
    public void ejecutarTransferencia(String username, String codigoOrigen,
                                      String codigoDestino, double importe) {
        if (codigoOrigen.equals(codigoDestino) == true) {
            IllegalArgumentException exc = new IllegalArgumentException(
               "GestionProductosFinancierosServImplStandard.ejecutarTransferencia.error.OrigenIgualDestino");
            throw exc;
        }        
        if (importe > 500) {
            BusinessException exc = new BusinessException(
               "GestionProductosFinancierosServImplStandard.ejecutarTransferencia.error.ImporteMaximoSobrepasado");
            throw exc;
        }        
        CuentaCorriente cc = (CuentaCorriente) productosDAO.findPorCodigo(codigoOrigen);
        // comprobar que cc existe (IllegalArgumentException)
        if (cc == null) {
            IllegalArgumentException exc = new IllegalArgumentException(
               "GestionProductosFinancierosServImplStandard.ejecutarTransferencia.error.CCInexistente");
            throw exc;
        }
        // comprobar que cc es del cliente indicado por username (IllegalArgumentException)
        // ...        
        ProductoFinanciero pf = productosDAO.findPorCodigo(codigoDestino);
        if (pf == null) {
            BusinessException exc = new BusinessException(
              "GestionProductosFinancierosServImplStandard.ejecutarTransferencia.error.PFInexistente");
            throw exc;
        }
        cc.transferir(pf, importe);
        
        productosDAO.actualizarProductoFinanciero(cc);
        productosDAO.actualizarProductoFinanciero(pf);
        
    }

    public void setProductosDAO(ProductoFinancieroDAO productosDAO) {
        this.productosDAO = productosDAO;
    }
    
    
    
    
}









